package org.javahispano.javacup.tacticas_aceptadas.psubias.ar.com.psubias.laLegion;

import org.javahispano.javacup.modelo.Posicion;
import org.javahispano.javacup.modelo.SituacionPartido;

public class Zona {

	private Posicion infDer;
	private Posicion supIzq;

	private Posicion noPaseInfDer;
	private Posicion noPaseSupIzq;

	public Posicion getNoPaseInfDer() {
		return noPaseInfDer;
	}

	public void setNoPaseInfDer(Posicion noPaseInfDer) {
		this.noPaseInfDer = noPaseInfDer;
	}

	public Posicion getNoPaseSupIzq() {
		return noPaseSupIzq;
	}

	public void setNoPaseSupIzq(Posicion noPaseSupIzq) {
		this.noPaseSupIzq = noPaseSupIzq;
	}

	private Posicion descanso;
	
	public Posicion getDescanso() {
		return descanso;
	}

	public void setDescanso(Posicion descanso) {
		this.descanso = descanso;
	}

	public Posicion getInfDer() {
		return infDer;
	}

	public void setInfDer(Posicion infDer) {
		this.infDer = infDer;
	}

	public Posicion getSupIzq() {
		return supIzq;
	}

	public void setSupIzq(Posicion supIzq) {
		this.supIzq = supIzq;
	}
	
	public Zona() {
		
	}

	public Zona(Posicion parSupIzq, Posicion parInfDer, Posicion parDescanso, Posicion parNoPaseSupIzq, Posicion parNoPaseInfDer) {
		this.infDer = parInfDer;
		this.supIzq =  parSupIzq;
		this.descanso = parDescanso;
		this.noPaseInfDer = parNoPaseInfDer;
		this.noPaseSupIzq = parNoPaseSupIzq;
	}

	public Zona(Posicion parSupIzq, Posicion parInfDer, Posicion parDescanso) {
		this.infDer = parInfDer;
		this.supIzq =  parSupIzq;
		this.descanso = parDescanso;
		this.noPaseInfDer = parDescanso;
		this.noPaseSupIzq = parDescanso;
	}
	
	public Zona(Posicion parSupIzq, Posicion parInfDer) {
		this.infDer = parInfDer;
		this.supIzq =  parSupIzq;
		this.descanso = centro();
		this.noPaseInfDer = centro();
		this.noPaseSupIzq = centro();
	}

	public boolean dentroDelArea(Posicion pos) {
		if ((pos.getX()>=supIzq.getX()) && (pos.getX()<=infDer.getX()) && (pos.getY()>=infDer.getY()) && pos.getY()<=supIzq.getY()) {
			return true;
		}
		return false;
	}
	
	public boolean dentroDelAreaNoPase(Posicion pos) {
		if ((pos.getX()>=noPaseSupIzq.getX()) && (pos.getX()<=noPaseInfDer.getX()) && (pos.getY()>=noPaseInfDer.getY()) && pos.getY()<=noPaseSupIzq.getY()) {
			return true;
		}
		return false;
	}

	public boolean rivalDentroDelArea(SituacionPartido sp) {
		
		for (int i = 0; i < 11; i++) {
			if (dentroDelArea(sp.rivales()[i])) {
				return true;
			}
		}
		return false;
	}
	
	public int rivalesDentroDelArea(SituacionPartido sp) {
		
		int rivales = 0;
		for (int i = 0; i < 11; i++) {
			if (dentroDelArea(sp.rivales()[i])) {
				rivales++;
			}
		}
		return rivales;
	}
	
	public Posicion centro(){
		return new Posicion((supIzq.getX() + infDer.getX()) / 2, (supIzq.getY() + infDer.getY()) / 2); 
	}
	
	public Posicion centroOBalon(Posicion balon){
		
		double y = 0d;
		double x = 0d;
		
		if ((balon.getY()>infDer.getY()) && (balon.getY()<supIzq.getY())) {
			y = balon.getY();
		} else {
			y = (supIzq.getY() + infDer.getY()) / 2;
		}

		if ((balon.getX()<infDer.getX()) && (balon.getX()>supIzq.getX())) {
			//x = (infDer.getX() - supIzq.getX()) - balon.getX() * 0.8;
			x = (supIzq.getX() + infDer.getX()) / 2; // arreglar!
		} else {
			x = (supIzq.getX() + infDer.getX()) / 2;
		}
		
		return new Posicion(x, y); 
	}
	
}
